function test() {
    let a = 1;//全局作用域中共享
    return {
        init: function (callback) {
            callback(a);
        }
    }
}
test().init(function (a) {
    a = a + 2;//闭包可以直接改变函数对象中的值
    console.log(a);//3
})
test().init(function (a) {
    a = a + 3;
    console.log(a);//4
})

/*
    函数和闭包模式和Class 写法对比:
    1. 函数适用于简单场景，不需要维护状态
    2. class明确对象和状态、行为的场景，面向对象（继承，封装和多态），每个实例都有独立状态
*/

class Test {
    constructor() {
        this.a = 1;
    }

    init(callback) {
        callback(this.a);
    }
}
const testInstance = new Test();
testInstance.init(function (a) {
    a = a + 2;//a值来自Test类实例
    console.log(a); // 输出 3
});
testInstance.init(function (a) {
    a = a + 3;
    console.log(a); // 输出 4
});